﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIGCBI.Entities;
using System.Data;
using System.Data.Entity;
using System.Data.Objects;

namespace SIGCBI.Repository
{
    public interface IUsuarioMenuRepository
    {
        List<USUARIO_MENU> GetAllUsuarioMenuByCriterio(Int32 idTrabajador);
        List<USUARIO_MENU> GetAllUsuarioMenu(Int32 idTrabajador);
        USUARIO_MENU GetAllUsuarioMenuByDniTrabajador(string dni);
        USUARIO_MENU GetAllFromUsuarioByTrabajadorFromLogin(string dni);
        List<USUARIO_MENU> GetAllFromDetalleMenuUsuarioByUsuarioId(Int32 id);

        void deleteDetalle(Int32 idDet, Int32 idMenu);
    }

    public class UsuarioMenuRepository : MasterDataAccess, IUsuarioMenuRepository
    {
        public List<USUARIO_MENU> GetAllUsuarioMenuByCriterio(int idTrabajador)
        {
            var query = from c in Context.USUARIO_MENU.Include("MENU").Include("USUARIO")
                        where c.USUARIO.IdTrabajador.Equals(idTrabajador)
                        select c;
            return query.ToList();
        }

        public List<USUARIO_MENU> GetAllUsuarioMenu(int idTrabajador)
        {
            var query = from c in Context.USUARIO_MENU.Include("MENU")
                        where c.IdUsuario.Equals(idTrabajador)
                        select c;
            return query.ToList();
        }

        public USUARIO_MENU GetAllUsuarioMenuByDniTrabajador(string dni)
        {
            var query = from c in Context.USUARIO_MENU.Include("MENU").Include("USUARIO")
                        where c.USUARIO.TRABAJADOR.Dni == dni
                        select c;
            return query.SingleOrDefault();
        }

        public USUARIO_MENU GetAllFromUsuarioByTrabajadorFromLogin(string dni)
        {
            var query = from c in Context.USUARIO_MENU.Include("MENU")
                        where c.USUARIO.TRABAJADOR.Dni == dni
                        select c;
            return query.FirstOrDefault();
        }

        public List<USUARIO_MENU> GetAllFromDetalleMenuUsuarioByUsuarioId(int id)
        {
            var query = from c in Context.USUARIO_MENU.Include("MENU").Include("USUARIO")
                        where c.IdUsuario.Equals(id)
                        select c;

            return query.ToList();
        }

        public void deleteDetalle(int idDet, int idMenu)
        {
            var existe = Context.USUARIO_MENU.Where(p => p.ID.Equals(idDet) && p.IdMenu.Equals(idMenu)).SingleOrDefault();

            if (existe != null)
            {
                Context.USUARIO_MENU.Remove(existe);
                Context.SaveChanges();
            }
        }
    }
}
